<?php
/**
 * Copyright 2013-present. ACTIA México.
 *
 * Archivo donde se encuentran los principales servicios web del proyecto
 * * "Ubicación en tiempo real".
 * 
 */

require_once 'library.php';

//reporte1
function getUbicacionExacta($param = array()){
	
	if(!session_valid($param['token']))
		return error('Tu sesi&oacute;n expir&oacute;');
	
	if(!isset($param['id_units']) )
		return error('Par&aacute;metros inv&aacute;lidos');
	
	$id_units = substr($param['id_units'], 0,-1);
	
	$msconnect = connectSigmaActia();
	
	if($msconnect["state"]=="false")
		return error($msconnect["reason"],mssql_get_last_message());
	
	$fecha = date("Y/m/d");
	$msquery = "SELECT 	t_Unidades.IdUnidad AS unidad,
						MAX(CONVERT(CHAR(5), t_DatosLocalizacion.FecHr, 108)) AS hora,
						MAX(CONVERT(CHAR(10), t_DatosLocalizacion.FecHr,111)) AS dia
		       
				FROM 	t_Unidades JOIN t_DatosLocalizacion ON t_Unidades.IdUnidad = t_DatosLocalizacion.IdUnidad
		       
				WHERE 	t_Unidades.IdUnidad IN ($id_units)
				AND 	CONVERT(CHAR(10), t_DatosLocalizacion.FecHr,111) LIKE '%$fecha%'
				AND 	t_DatosLocalizacion.Velocidad != 0
				AND 	t_DatosLocalizacion.RPM != 0
						
				GROUP BY t_Unidades.IdUnidad";
				
	$msresults= mssql_query($msquery);
	
	if (!$msresults)
		return error('Consulta no v&aacute;lida',mssql_get_last_message());
	
	$if_datos = false;
	$camiones=array();
	
	while($row = mssql_fetch_array($msresults)){
		
		$id_camion=$row["unidad"];
		$hora=$row["hora"];
		$dia=$row["dia"];
		
		$msquery2 = "	SELECT	t_Unidades.IdUnidad AS unidad,
								t_Roles.des_rol AS rol,
								t_DatosLocalizacion.RPM AS rpm,
								t_DatosLocalizacion.Velocidad AS velocidad,
								t_DatosLocalizacion.Combustible AS combustible,
								t_ClientesACF.Nombre AS linea,
								t_DatosLocalizacion.Latitud AS latitud,
								t_DatosLocalizacion.Longitud AS longitud	 
			       
						FROM		t_Unidades
						INNER JOIN	t_ClientesACF ON t_Unidades.IdCliente = t_ClientesACF.IdCliente
						INNER JOIN	t_Roles ON t_Unidades.IdRol = t_Roles.ID_rol
						INNER JOIN	t_DatosLocalizacion ON t_Unidades.IdUnidad = t_DatosLocalizacion.IdUnidad
			       
						WHERE	t_Unidades.IdUnidad IN ($id_camion)
						AND 	CONVERT(CHAR(10), t_DatosLocalizacion.FecHr,111) LIKE '%$fecha%'
								
						ORDER BY CONVERT(CHAR(5), t_DatosLocalizacion.FecHr, 108) ASC";
		
		$msresults2 = mssql_query($msquery2);
	
		if (!$msresults2)
			return error('Consulta no v&aacute;lida',mssql_get_last_message());
	
		while($row2 = mssql_fetch_array($msresults2)){
			$if_datos=true;
			
			$id_unidad = $row2["unidad"];
			$rol = $row2["rol"];
			$rpm = $row2["rpm"];
			$velocidad = $row2["velocidad"];
			$combustible = $row2["combustible"];
			$linea = $row2["linea"];
			$lat =$row2["latitud"];
			$long=$row2["longitud"];
		}
		
		array_push($camiones,array(	"num_unidad"=>$id_unidad,
									"rol"		=>$rol,
									"rpm"		=>$rpm,
									"longitud"	=>$long,
									"latitud"	=>$lat,
									"velocidad"	=>$velocidad,
									"combustible"=>$combustible,
									"nombre"		=>$linea));
	}
	
	if(!$if_datos)
		return error('No se obtuvieron resultados','La consulta no obtuvo resultados');
	
	disconnectSigmaActia($msconnect);
	
	header('Access-Control-Allow-Origin: *');
	return json_encode(array("state"=>"true","camiones"=>$camiones));
}

//reporte2
function getAltosTotales($param = array()){
	
	if(!session_valid($param['token']))
		return error('Tu sesi&oacute;n expir&oacute;.');
	
	if(!isset($param['id_units']) )
	return error('Par&aacute;metros inv&aacute;lidos');

	$string_of_ids = substr($param['id_units'], 0,-1);
	$id_units = explode(",", $string_of_ids);
	
	$msconnect = connectSigmaActia();
	
	if($msconnect["state"]=="false")
		return error($msconnect["reason"],mssql_get_last_message());
	
	$fecha = date("Y/m/d");
	
	// Donde se almacenarán los camiones cuyos últimos registros en la BD indican que se encuentran parados.
	$unidades_paradas = array();
	for ($i = 0; $i < count($id_units); $i++){
		$msquery ="SELECT TOP 1 t_Unidades.IdUnidad,
								t_DatosLocalizacion.Velocidad
		
					FROM	t_Unidades JOIN t_DatosLocalizacion ON t_Unidades.IdUnidad = t_DatosLocalizacion.IdUnidad
					
					WHERE	t_Unidades.IdUnidad IN (".$id_units[$i].")
					AND		t_DatosLocalizacion.RPM != 0
					AND		CONVERT(CHAR(10), t_DatosLocalizacion.FecHr,111) LIKE '%$fecha%'
					
					ORDER BY CONVERT(CHAR(5), t_DatosLocalizacion.FecHr, 108) DESC";
		
		$msresults= mssql_query($msquery);
	
		if (!$msresults)
			return error('Consulta no v&aacute;lida',mssql_get_last_message());
		
		while($row = mssql_fetch_array($msresults)){			
			if($row["velocidad"] === 0)
				array_push($unidades_paradas, $row["IdUnidad"]);
		}
		
		if (count($unidades_paradas) === 0)
			return error('No se obtuvieron resultados','La consulta no obtuvo resultados');
		
		$info_de_unidad=array();
		
		for ($i = 0; $i < count($unidades_paradas); $i++){
		
			$id_unidad=$unidades_paradas[$i];
			
			// Regresa datos de ciertos camiones.
			$msquery2 ="SELECT 	t_Unidades.IdUnidad AS unidad,
								t_ClientesACF.Nombre AS linea,
								t_Roles.des_rol AS rol,
								t_DatosLocalizacion.RPM AS rpm,
								t_DatosLocalizacion.Velocidad AS velocidad,
								CONVERT(CHAR(10), t_DatosLocalizacion.FecHr,111) AS fecha,
								CONVERT(CHAR(5), t_DatosLocalizacion.FecHr, 108) AS hora,
								t_DatosLocalizacion.Latitud AS latitud,
								t_DatosLocalizacion.Longitud AS longitud
						
						FROM    	t_Unidades
						INNER JOIN	t_ClientesACF ON t_Unidades.IdCliente = t_ClientesACF.IdCliente
						INNER JOIN	t_Roles ON t_Unidades.IdRol = t_Roles.ID_Rol
						INNER JOIN	t_DatosLocalizacion ON t_Unidades.IdUnidad = t_DatosLocalizacion.IdUnidad
						
						WHERE 	t_Unidades.IdUnidad IN (".$id_unidad.")
						AND 	CONVERT(CHAR(10), t_DatosLocalizacion.FecHr,111) LIKE '%$fecha%'
						
						ORDER BY CONVERT(CHAR(5), t_DatosLocalizacion.FecHr, 108) DESC";
							
			$msresults2 = mssql_query($msquery2);
		
			if (!$msresults2)
				return error('Consulta no v&aacute;lida',mssql_get_last_message());
			
			while($row2 = mssql_fetch_array($msresults2)){
				if($row2["velocidad"] === 0):
					$pivoteRow = $row2;
				else:
					break;
				endif;
			}
			
			$linea=$row2["linea"];
			$lat =$row2["latitud"];
			$long=$row2["longitud"];
			
			$rol =$row2["rol"];
			$primera_hora = $pivoteRow["hora"];
			$ultima_hora = date("H:m");
			$tiempo_parado = diffhora($primera_hora, $ultima_hora);
			
			array_push($info_de_unidad,array("num_unidad"	=>$id_unidad,
											"linea"		=>$linea,
											"rol"		=>$rol,
											"tiempo_parado"=>$tiempo_parado,
											"longitud"	=>$long,
											"latitud"	=>$lat));
		}
		
		if (count($info_de_unidad) === 0)
		return error('No se obtuvieron resultados','La consulta no obtuvo resultados');
	
		disconnectSigmaActia($msconnect);
		
		header('Access-Control-Allow-Origin: *');
		return json_encode(array("state"=>"true","camiones"=>$info_de_unidad));
	}
}


//reporte4
function getComportamientoConduccion($param = array()){
	
	if(!session_valid($param['token']))
		return error('Tu sesi&oacute;n expir&oacute;.');
		
	if(!isset($param['id_units']) )
		return error('Par&aacute;metros inv&aacute;lidos');
	
	$id_units = substr($param['id_units'], 0,-1);
	
	$msconnect = connectSigmaActia();
	
	if($msconnect["state"]=="false")
		return error($msconnect["reason"],mssql_get_last_message());
	
	$fecha = date("Y/m/d");
	$msquery = "SELECT	t_DatosLocalizacion.IdUnidad AS unidad,
						t_DatosLocalizacion.RPM AS rpm,
						CONVERT(CHAR(10), t_DatosLocalizacion.FecHr,111) AS fecha,
						CONVERT(CHAR(5), t_DatosLocalizacion.FecHr, 108) AS hora
				
				FROM    t_DatosLocalizacion
			
				WHERE 	t_DatosLocalizacion.IdUnidad IN ($id_units)
				AND		t_DatosLocalizacion.RPM != 0
				AND		CONVERT(CHAR(10), t_DatosLocalizacion.FecHr,111) LIKE '%$fecha%'";
	
	$msresults= mssql_query($msquery);
	
	if (!$msresults)
		return error('Consulta no v&aacute;lida',mssql_get_last_message());
	
	$if_datos = false;
	$count_sobrerevoluciones=$count_potencia=$count_economica=$count_ralenti=$total=0;
	$arr_camiones=array();
	
	while($row = mssql_fetch_array($msresults)){
		
		$id_camion=$row["unidad"];
		$rpm=$row["rpm"];
		
		if(!$if_datos) $pivote_unidad = $id_camion;
		
		$if_datos=true;
		
		if($pivote_unidad != $id_camion):
			
			$total= $count_sobrerevoluciones + $count_potencia + $count_economica + $count_ralenti;
			$camion = array("num_unidad"=> $pivote_unidad,
							"sobrerevoluciones"	=>($count_sobrerevoluciones*100)/$total,
							"potencia"	=> ($count_potencia*100)/$total,
							"economica"	=> ($count_economica*100)/$total,
							"ralenti"	=> ($count_ralenti*100)/$total);
			array_push($arr_camiones,$camion);
			
			$pivote_unidad = $id_camion;
			$count_sobrerevoluciones=$count_potencia=$count_economica=$count_ralenti=$total=0;
		endif;			
			
		if($rpm <= 1000):
			$count_ralenti++;
		elseif($rpm >= 1001 && $rpm <= 1320):
			$count_economica++;
		elseif($rpm >= 1321 &&$rpm <= 1600):
			$count_potencia++;
		elseif($rpm >= 1601):
			$count_sobrerevoluciones++;
		endif;
	}
	if($pivote_unidad == $id_camion):
			
		$total= $count_sobrerevoluciones + $count_potencia + $count_economica + $count_ralenti;
		$camion = array("num_unidad"=>	$pivote_unidad,
						"sobrerevoluciones"=>($count_sobrerevoluciones*100)/$total,
						"potencia"	=>	($count_potencia*100)/$total,
						"economica"	=>	($count_economica*100)/$total,
						"ralenti"	=>	($count_ralenti*100)/$total);
		array_push($arr_camiones,$camion);
		
		$pivote_unidad = $id_camion;
		$count_sobrerevoluciones=$count_potencia=$count_economica=$count_ralenti=$total=0;
	
	endif;
	
	if(!$if_datos)
		return error('No se obtuvieron resultados','La consulta no obtuvo resultados');
	
	disconnectSigmaActia($msconnect);
	
	header('Access-Control-Allow-Origin: *');
	return json_encode(array("state"=>"true","camiones"=>$arr_camiones));
}

//reporte5
function getKilometrosRecorridos($param = array()){
	
	if(!session_valid($param['token']))
		return error('Tu sesi&oacute;n expir&oacute;');
	
	if(!isset($param['id_units']) )
		return error('Par&aacute;metros inv&aacute;lidos');
	
	$id_units = substr($param['id_units'], 0,-1);
	
	$msconnect = connectSigmaActia();
	
	if($msconnect["state"]=="false")
		return error($msconnect["reason"],mssql_get_last_message());
	
	$fecha = date("Y/m/d");
	$msquery = "SELECT	t_Unidades.IdUnidad AS unidad,
						MAX(CONVERT(CHAR(5), t_DatosLocalizacion.FecHr, 108)) AS hora,
						MAX(CONVERT(CHAR(10), t_DatosLocalizacion.FecHr,111)) AS dia
		       
				FROM 	t_Unidades JOIN t_DatosLocalizacion ON t_Unidades.IdUnidad = t_DatosLocalizacion.IdUnidad
		       
				WHERE	t_Unidades.IdUnidad IN ($id_units)
				AND		CONVERT(CHAR(10), t_DatosLocalizacion.FecHr,111) LIKE '%$fecha%'
				AND		t_DatosLocalizacion.Velocidad != 0 AND t_DatosLocalizacion.RPM != 0
						
				GROUP BY t_Unidades.IdUnidad";

	$msresults= mssql_query($msquery);
	
	if (!$msresults)
		return error('Consulta no v&aacute;lida',mssql_get_last_message());

	$if_datos = false;
	$camiones=array();
	while($row = mssql_fetch_array($msresults)){
		
		$id_camion=$row["unidad"];
		
		$msquery2 =	"SELECT	t_Unidades.IdUnidad AS unidad,
							t_Roles.des_rol AS rol,
							t_DatosLocalizacion.RPM AS rpm,
							t_DatosLocalizacion.Velocidad AS velocidad,
							t_DatosLocalizacion.Odometro AS odometro,
							t_ClientesACF.Nombre AS linea,
							t_DatosLocalizacion.Latitud AS latitud,
							t_DatosLocalizacion.Longitud AS longitud,
							CONVERT(CHAR(5), t_DatosLocalizacion.FecHr, 108) AS hora,
							CONVERT(CHAR(10),t_DatosLocalizacion.FecHr,111) AS dia   	 
				
					FROM 		t_Unidades
					INNER JOIN	t_ClientesACF ON t_Unidades.IdCliente = t_ClientesACF.IdCliente
					INNER JOIN	t_Roles ON t_Unidades.IdRol = t_Roles.ID_rol
					INNER JOIN	t_DatosLocalizacion ON t_Unidades.IdUnidad = t_DatosLocalizacion.IdUnidad
				
					WHERE	t_Unidades.IdUnidad IN ($id_camion)
					AND		CONVERT(CHAR(10), t_DatosLocalizacion.FecHr,111) LIKE '%$fecha%'
							
					ORDER BY CONVERT(CHAR(5), t_DatosLocalizacion.FecHr, 108) ASC";
	
		$msresults2 = mssql_query($msquery2);
	
		if (!$msresults2)
			return error('Consulta no v&aacute;lida',mssql_get_last_message());
	
		$pivoteKilometros=0;
		$camion=array();
		while($row2 = mssql_fetch_array($msresults2)){
			
			if(!$if_datos)
				$pivoteKilometros = $row2['odometro'];
				
			$if_datos=true;
			
			$odometro = $row2['odometro']-$pivoteKilometros;
			
			array_push($camion,array("num_unidad"=>$row2['unidad'],
									"rol"		=>$row2['rol'],
									"rpm"		=>$row2['rpm'],
									"velocidad"	=>$row2['velocidad'],
									"odometro"	=>$odometro,
									"cliente"		=>$row2['linea'],
									"longitud"	=>$row2['longitud'],
									"latitud"	=>$row2['latitud'],
									"hora"		=>$row2['hora'],
									"dia"		=>$row2['dia']));
		}
		array_push($camiones,$camion);
	}
	
	if(!$if_datos)
		return error('No se obtuvieron resultados','La consulta no obtuvo resultados');
	
	disconnectSigmaActia($msconnect);
	
	header('Access-Control-Allow-Origin: *');
	return json_encode(array("state"=>"true","camiones"=>$camiones));
}

function main($args = array()){
	
	if(!isset($args['func']) || !function_exists($args['func']))
		return error('Funci&oacute;n inv&aacute;lida');
	
	return $args['func']($args);
}

echo main($_REQUEST);

?>
